package com.kaochong.xcx.utils;

import com.kaochong.xcx.cache.FormIdCache;
import com.kaochong.xcx.pojo.model.TemplateData;
import com.kaochong.xcx.pojo.model.WxTemplate;
import com.kaochong.xcx.service.impl.WechatServiceImpl;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class TemplateUtil {

    //微信发送模板地址
    public final String WX_SEND_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=%s";

    @Autowired
    private WechatServiceImpl wechatService;

    @Autowired
    FormIdCache formIdCache;

    /**
     * 发送模板消息工具类方法
     * 【参数说明】：
     *
     * @param openId：接收人的openid；
     * @param TemplateId：模板id；
     * @param TemplatePage：要跳转的页面；
     * @param keyArr：要发送的关键字（数组形式）
     * @param bigKeywordIndex：要重点方大的关键字下标，不需要放大请传入 关键字数量以外的数字都可以，如“-1”
     */
    public Integer sendTemplateMessage(String openId, String TemplateId, String TemplatePage, String[] keyArr, int bigKeywordIndex) {
        String formId = formIdCache.getValidFormId(openId);
        if (StringUtils.isNotBlank(formId)) {
            String accessToken = wechatService.getAccessToken(null);
            String url = String.format(WX_SEND_TEMPLATE_URL, accessToken);
            WxTemplate message = new WxTemplate();
            message.setTouser(openId);
            message.setTemplate_id(TemplateId);
            message.setPage(TemplatePage);
            message.setForm_id(formId);
            Map<String, TemplateData> m = new HashMap<>();
            for (int i = 0; i < keyArr.length; i++) {
                m.put(String.format("keyword%s", i + 1), new TemplateData(keyArr[i]));
            }
            message.setData(m);
            if (bigKeywordIndex > 0 && bigKeywordIndex <= keyArr.length) {
                message.setEmphasis_keyword(String.format("keyword%s.DATA", bigKeywordIndex));
            }
            String paramJson = JsonUtil.toJson(message);
            String response = RestTemplateUtils.post(url, paramJson);
            Map<String, Object> map = JsonUtil.toObject(response, Map.class);
            Integer errcode = (Integer) map.get("errcode");
            if (errcode != 0) {
                log.error("【背单词-模板消息】errorMsg，request={}, response={}", JsonUtil.toGson(message),
                        JsonUtil.toGson(response));
            } else {
                log.info("【背单词-模板消息】template send success");
            }
            return errcode;
        }
        return 0;
    }
}
